import cv2
import os 
import matplotlib.pyplot as plt 
import copy

print(cv2.__version__)

filename1 = os.path.abspath('第二次作业/pic2.jpg')
filename2 = os.path.abspath('第二次作业/pic6.jpg')
img1 = cv2.imread(filename1)
img2 = cv2.imread(filename2,0)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)

# 灰度直方图
# imaes:输入的图像
# channels:选择图像的通道
# mask:掩膜，是一个大小和image一样的np数组，其中把需要处理的部分指定为1，
# 不需要处理的部分指定为0，一般设置为None，表示处理整幅图像
# histSize:使用多少个bin(柱子)，一般为256
# ranges:像素值的范围，一般为[0,255]表示0~255

hist = cv2.calcHist([img2],[0],None,[256],[0,255])
# print(hist)
# hist[hist>1000]=1000
# plt.plot(hist)
# plt.show()

# 大津算法
_,bw1 = cv2.threshold(img2,127,255,cv2.THRESH_BINARY)
_,bw2 = cv2.threshold(img2,127,255,cv2.THRESH_BINARY_INV)
_,bw3 = cv2.threshold(img2,127,255,cv2.THRESH_TRUNC)
_,bw4 = cv2.threshold(img2,127,255,cv2.THRESH_TOZERO)
_,bw5 = cv2.threshold(img2,127,255,cv2.THRESH_TOZERO_INV)
titles = ['original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img2,bw1,bw2,bw3,bw3,bw5]

for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([])
plt.show()


cv2.waitKey()
cv2.destroyAllWindows()

# # 灰度直方图
# cv2.calcHist()

# # 大津算法
# cv2.threshold()

# # 漫水填充
# cv2.floodFill()

# # 自适应阈值分割
# cv2.adaptiveThreshold()

# # 分水岭分割
# cv2.watershed()

# # 画出目标轮廓
# cv2.drawContours()

# # 找到轮廓点集合
# cv2.findContours()

# # 计算轮廓线长度
# cv2.arcLength()

# # 计算轮廓面积
# cv2.contourArea()

# # 计算轮廓包围矩形，水平
# cv2.boundingRect()

# # 计算轮廓矩形，偏斜
# cv2.minAreaRect()

# # 计算轮廓拟合椭圆
# cv2.fitEllipse()